package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	//当导入一个包时，该包下的文件里所有init()函数都会被执行，然而，有些时候我们并不需要把整个包都导入进来，
	// 仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。
	//即使用【import _ 包路径】只是引用该包，仅仅是为了调用init()函数，所以无法通过包名来调用包中的其他函数。
)

func main36() {
	db, err := sql.Open("mysql", "root:denglibin@tcp(127.0.0.1:3306)/go_db?charset=utf8")
	if err != nil {
		panic(err)
	}
	// 设置连接池
	db.SetMaxOpenConns(10)
	db.SetMaxIdleConns(5)
	defer db.Close()
	err = db.Ping()
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println("数据库连接成功")
	}
	stmt, err := db.Prepare("SELECT id,username FROM user where id=?")
	defer stmt.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	rows, err := stmt.Query(1)
	defer rows.Close()
	if err != nil {
		panic(err)
	}

	// 获取字段
	columns, err := rows.Columns()
	if err != nil {
		fmt.Println("获取字段信息错误", err)
	}
	fmt.Println("查询结果:")
	for _, column := range columns {
		fmt.Print(column + " ")
	}
	fmt.Println()
	var id int
	var username string
	for rows.Next() {
		// 获取数据
		err := rows.Scan(&id, &username)
		if err != nil {
			fmt.Printf("get user info error [%s]", err)
		}
		fmt.Println(id, username)
	}
}
